package com.luom.fsp.config;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import javax.websocket.server.ServerEndpointConfig;

/**
 * WebSocket 实例不由 Spring 管理，因此无法通过 @Resource 或 @Autowired 注入依赖。
 * 通过自定义 ServerEndpointConfig.Configurator，让 Spring 管理 WebSocket 实例的创建，从而支持依赖注入。
 */
@Component
public class SpringConfigurator extends ServerEndpointConfig.Configurator implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
        // 从 Spring 容器中获取 WebSocket 端点实例
        return applicationContext.getBean(endpointClass);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringConfigurator.applicationContext = applicationContext;
    }
}